"""
Python中 函数的参数主要有如下四种：
    位置参数
    关键字参数
    默认参数(缺省参数)
    不定长参数

细节：
    1. 位置参数 和 关键字参数 是针对于 实参 来讲的
    2. 缺省参数 和 不定长参数 是针对 形参 来将的
不定长参数
    概述：
        不定长参数 也叫 可变参数，即，参数的个数是可以变化的
    应用场景：
        适用于 实参个数不确定的情况， 就可以把形参定义成可变参数
    格式：
        *args : 只能接收所有的位置参数，封装到元组中
        **kwargs: 只能接收所有的关键字参数，封装到 字典中

    细节：
       1.  关于实参： 位置参数在前，关键字参数灾后
       2. 关于形参： 如果有两种，可变参数都有，则 *args在前 **kwargs在后
       3. 关于形参，如果既有缺省参数，又有不定长参数，则编写顺序为 *args  缺省参数  **kwargs

"""

# 需求1：演示不定长参数 之 接受 位置参数
def method1(*args):
    print(f'方法method1的所有参数：{args}')
    print(type(args))

# 需求2 ： 演示 演示不定长参数 之 接受 关键字参数
def method2(**kwargs):
    print(f'方法method2的所有参数：{kwargs}')
    print(type(kwargs))


# 需求3 ： 演示 演示不定长参数 之 同时定义两种
def method3(*args,**kwargs):
    print(f'方法method3->args:：{args}')
    print(f'方法method3->kwargs:：{kwargs}')
    print(type(args))
    print(type(kwargs))

# 需求4 ： 演示 演示不定长参数 之 缺省参数 + 不定长参数
def method4(*args,age = 18,**kwargs):
    print(f'方法method3->args:：{args}')
    print(f'方法method3->kwargs:：{kwargs}')
    print(f'age={age}')


if __name__ == '__main__':
    method1(1,2,3,4,5,6,'刘千琪',True)
    print('=' * 30)
    method2(name='刘千琪',age=18,address='北京市海淀区',gender='女')
    print('=' * 30)

    method3(19,20,name='崔龙腾',address='北京市朝阳区')
    # method3(name='赵俊',age=18,'北京市通州区') # 报错， 位置参数在前，关键字参数在后

    print('=' * 30)
    method4('任瑜阳','女',address='北京市海淀区')
    method4('李欣桐','女', age=21, address='北京市海淀区')